home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / yacc / flexyacc / aflex.lha / aflex / src / ascan.a < prev    next >
Text File  |  1993-05-31  |  42KB  |  1,319 lines

  1. -- A lexical scanner generated by aflex
  2. with text_io; use text_io;
  3. with ascan_dfa; use ascan_dfa; 
  4. with ascan_io; use ascan_io; 
  5. --# line 1 "ascan.l"
  6. -- Copyright (c) 1990 Regents of the University of California.
  7. -- All rights reserved.
  8. --
  9. -- This software was developed by John Self of the Arcadia project
  10. -- at the University of California, Irvine.
  11. --
  12. -- Redistribution and use in source and binary forms are permitted
  13. -- provided that the above copyright notice and this paragraph are
  14. -- duplicated in all such forms and that any documentation,
  15. -- advertising materials, and other materials related to such
  16. -- distribution and use acknowledge that the software was developed
  17. -- by the University of California, Irvine.  The name of the
  18. -- University may not be used to endorse or promote products derived
  19. -- from this software without specific prior written permission.
  20. -- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  21. -- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  22. -- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  23. -- TITLE scanner specification file
  24. -- AUTHOR: John Self (UCI)
  25. -- DESCRIPTION regular expressions and actions matching tokens
  26. --             that aflex expects to find in its input.
  27. -- NOTES input to aflex (NOT alex.)  It uses exclusive start conditions
  28. --       and case insensitive scanner generation available only in aflex
  29. --       (or flex if you use C.)
  30. --       generate scanner using the command 'aflex -is ascan.l'
  31. -- $Header: /dc/uc/self/arcadia/aflex/ada/src/RCS/ascan.l,v 1.20 1992/12/29 22:47:32 self Exp $ 
  32. --# line 44 "ascan.l"
  33.  
  34.  
  35. with misc_defs, misc, sym, parse_tokens, int_io;
  36. with tstring, ascan_dfa, ascan_io, external_file_manager;
  37. use misc_defs, parse_tokens, tstring;
  38. use ascan_dfa, ascan_io, external_file_manager;
  39.  
  40. package scanner is
  41.     call_yylex : boolean := false;
  42.     function get_token return Token;
  43. end scanner;
  44.  
  45. package body scanner is
  46.  
  47. beglin : boolean := false;
  48. i, bracelevel: integer;
  49.  
  50. function get_token return Token is
  51.     toktype : Token;
  52.     didadef, indented_code : boolean;
  53.     cclval : integer;
  54.     nmdefptr : vstring;
  55.     nmdef, tmpbuf : vstring;
  56.  
  57. procedure ACTION_ECHO is
  58. begin
  59.     text_io.put( temp_action_file, yytext(1..YYLength) );
  60. end ACTION_ECHO;
  61.  
  62. procedure MARK_END_OF_PROLOG is
  63. begin
  64.      text_io.put( temp_action_file, "%%%% end of prolog" );
  65.      text_io.new_line( temp_action_file );
  66. end MARK_END_OF_PROLOG;
  67.  
  68. procedure PUT_BACK_STRING(str : vstring; start : integer) is
  69. begin
  70.     for i in reverse start+1..tstring.len(str) loop
  71.         unput( CHAR(str,i) );
  72.     end loop;
  73. end PUT_BACK_STRING;
  74.  
  75. function check_yylex_here return boolean is
  76. begin
  77.     return ( (yytext'length >= 2) and then
  78.             ((yytext(1) = '#') and (yytext(2) = '#')));
  79. end check_yylex_here;
  80.  
  81. function YYLex return Token is
  82. subtype short is integer range -32768..32767;
  83.     yy_act : integer;
  84.     yy_c : short;
  85.  
  86. -- returned upon end-of-file
  87. YY_END_TOK : constant integer := 0;
  88. YY_END_OF_BUFFER : constant := 82;
  89. subtype yy_state_type is integer;
  90. yy_current_state : yy_state_type;
  91. INITIAL : constant := 0;
  92. SECT2 : constant := 1;
  93. SECT2PROLOG : constant := 2;
  94. SECT3 : constant := 3;
  95. PICKUPDEF : constant := 4;
  96. SC : constant := 5;
  97. CARETISBOL : constant := 6;
  98. NUM : constant := 7;
  99. QUOTE : constant := 8;
  100. FIRSTCCL : constant := 9;
  101. CCL : constant := 10;
  102. ACTION : constant := 11;
  103. RECOVER : constant := 12;
  104. BRACEERROR : constant := 13;
  105. ACTION_STRING : constant := 14;
  106. yy_accept : constant array(0..206) of short :=
  107.     (   0,
  108.         0,    0,    0,    0,    0,    0,   80,   80,    0,    0,
  109.         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  110.         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  111.        82,   13,    6,   12,   10,    1,   11,   13,   13,   13,
  112.         9,   39,   31,   32,   25,   39,   38,   23,   39,   39,
  113.        39,   31,   21,   39,   39,   24,   81,   19,   80,   80,
  114.        15,   14,   16,   45,   81,   41,   42,   44,   46,   60,
  115.        61,   58,   57,   59,   47,   49,   48,   47,   53,   52,
  116.        53,   53,   55,   55,   55,   56,   66,   71,   70,   72,
  117.        66,   72,   67,   64,   65,   81,   17,   63,   62,   73,
  118.  
  119.        75,   76,   77,    6,   12,   10,    1,   11,    0,    0,
  120.         2,    0,    7,    4,    5,    0,    9,   31,   32,    0,
  121.        28,    0,    0,    0,   78,   78,   27,   26,   27,    0,
  122.        31,   21,    0,    0,   35,    0,    0,   19,   18,   80,
  123.        80,   15,   14,   43,   44,   57,   79,   79,   50,   51,
  124.        54,   66,    0,   69,    0,   66,   67,    0,   17,   73,
  125.        74,    0,    7,    0,    0,    3,    0,   29,    0,   36,
  126.         0,   78,   27,   27,   37,    0,    0,    0,   35,    0,
  127.        30,   79,   66,   68,    0,    0,    8,    0,    0,    0,
  128.         0,    0,    0,    0,    0,    0,    0,   22,    0,   22,
  129.  
  130.         0,   22,    4,    0,   34,    0
  131.     ) ;
  132.  
  133. yy_ec : constant array(CHARACTER'FIRST..CHARACTER'LAST) of short :=
  134.     (   0,
  135.         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
  136.         1,    4,    1,    1,    1,    1,    1,    1,    1,    1,
  137.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  138.         1,    5,    1,    6,    7,    8,    9,    1,   10,   11,
  139.        11,   11,   11,   12,   13,   11,   14,   15,   15,   15,
  140.        15,   15,   15,   15,   15,   15,   15,    1,    1,   16,
  141.         1,   17,   11,    1,   23,   22,   22,   22,   24,   25,
  142.        22,   22,   22,   22,   22,   22,   22,   22,   26,   22,
  143.        22,   27,   28,   29,   22,   22,   22,   30,   22,   22,
  144.        18,   19,   20,   21,   22,    1,   23,   22,   22,   22,
  145.  
  146.        24,   25,   22,   22,   22,   22,   22,   22,   22,   22,
  147.        26,   22,   22,   27,   28,   29,   22,   22,   22,   30,
  148.        22,   22,   31,   32,   33,    1,    1
  149.     ) ;
  150.  
  151. yy_meta : constant array(0..33) of short :=
  152.     (   0,
  153.         1,    2,    3,    2,    2,    4,    1,    1,    1,    5,
  154.         1,    1,    6,    5,    7,    1,    1,    1,    8,    9,
  155.         1,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  156.         5,   11,   12
  157.     ) ;
  158.  
  159. yy_base : constant array(0..254) of short :=
  160.     (   0,
  161.         0,   29,   58,   89,  503,  499,  498,  305,    4,    8,
  162.       119,  147,  286,  285,   32,   34,   65,   67,   93,   96,
  163.       110,  113,  177,    0,  302,  301,   12,   15,   82,  121,
  164.       303,  880,   76,  880,    0,   37,  880,  299,   11,  288,
  165.         0,  880,   11,  880,  880,   14,  880,  284,  280,  283,
  166.       196,  225,  880,  288,  283,  880,  292,    0,  291,  880,
  167.         0,  133,  880,  880,  880,  880,  272,    0,  880,  880,
  168.       880,  880,  277,  880,  880,  880,  880,  276,  880,  880,
  169.       274,  275,  880,    0,  272,  880,    0,  880,  880,  109,
  170.       273,  880,    0,  880,  880,  282,  880,  880,  880,    0,
  171.  
  172.       880,  880,    0,  149,  880,    0,  152,  880,  271,  280,
  173.       880,  272,    0,  247,  880,  263,    0,   72,  880,  262,
  174.       880,  240,   63,  119,  880,  248,    0,  880,  245,  249,
  175.       277,  880,  248,  153,    0,  256,  253,    0,  880,  252,
  176.       880,    0,  156,  880,    0,  239,  880,  238,  880,  880,
  177.       880,    0,  221,  880,    0,  309,    0,  249,  880,    0,
  178.       880,  248,    0,  227,  246,  880,  245,  880,  221,  880,
  179.       148,  231,    0,    0,  880,  232,  229,  230,    0,  241,
  180.       880,  226,    0,  880,  236,  234,  880,  209,  210,  197,
  181.       231,  212,  159,  128,  108,  194,  115,  880,  108,  880,
  182.  
  183.        84,  880,  880,    4,  880,  880,  342,  354,  366,  378,
  184.       390,  402,  414,  426,  438,  450,  462,  474,  486,  493,
  185.       502,  508,  520,  527,  536,  547,  559,  571,  583,  595,
  186.       607,  619,  631,  638,  648,  660,  672,  684,  695,  702,
  187.       712,  724,  736,  748,  760,  772,  784,  795,  807,  819,
  188.       831,  843,  855,  867
  189.     ) ;
  190.  
  191. yy_def : constant array(0..254) of short :=
  192.     (   0,
  193.       207,  207,  208,  208,  209,  209,  210,  210,  211,  211,
  194.       212,  212,  213,  213,  214,  214,  215,  215,  216,  216,
  195.       217,  217,  206,   23,  218,  218,  213,  213,  219,  219,
  196.       206,  206,  206,  206,  220,  221,  206,  222,  223,  206,
  197.       224,  206,  225,  206,  206,  206,  206,  206,  226,  227,
  198.       228,  229,  206,  206,  206,  206,  230,  231,  232,  206,
  199.       233,  206,  206,  206,  206,  206,  206,  234,  206,  206,
  200.       206,  206,  206,  206,  206,  206,  206,  227,  206,  206,
  201.       235,  236,  206,  237,  227,  206,  238,  206,  206,  239,
  202.       238,  206,  240,  206,  206,  241,  206,  206,  206,  242,
  203.  
  204.       206,  206,  243,  206,  206,  220,  221,  206,  206,  222,
  205.       206,  206,  244,  206,  206,  245,  224,  225,  206,  246,
  206.       206,  206,  226,  226,  206,  206,  247,  206,  247,  206,
  207.       229,  206,  206,  246,  248,  249,  230,  231,  206,  232,
  208.       206,  233,  206,  206,  234,  206,  206,  206,  206,  206,
  209.       206,  238,  239,  206,  239,  206,  240,  241,  206,  242,
  210.       206,  250,  244,  206,  245,  206,  246,  206,  206,  206,
  211.       226,  206,  247,  129,  206,  206,  249,  246,  248,  249,
  212.       206,  206,  156,  206,  251,  250,  206,  206,  206,  226,
  213.       252,  253,  254,  206,  206,  226,  252,  206,  253,  206,
  214.  
  215.       254,  206,  206,  206,  206,    0,  206,  206,  206,  206,
  216.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  217.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  218.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  219.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  220.       206,  206,  206,  206
  221.     ) ;
  222.  
  223. yy_nxt : constant array(0..913) of short :=
  224.     (   0,
  225.       206,   33,   34,   33,   33,   62,   63,   62,   62,   62,
  226.        63,   62,   62,  119,   98,  121,  121,   98,  121,  113,
  227.       205,   35,   35,   35,   35,   35,   35,   35,   35,   35,
  228.        36,   37,   36,   36,   71,   38,   71,   39,  114,  108,
  229.       115,   40,  120,   72,   99,   72,   73,   99,   73,  109,
  230.        41,   41,   41,   41,   41,   41,   41,   41,   41,   43,
  231.        44,   43,   43,   45,   74,   46,   74,   76,   47,   76,
  232.        77,   47,   77,   48,  119,   49,   50,  104,  105,  104,
  233.       104,  124,  170,   78,  101,   78,  202,  102,   51,   47,
  234.        52,   53,   52,   52,   45,   65,   46,   54,   65,   47,
  235.  
  236.       103,   55,   47,  120,   48,   80,   49,   50,   80,   56,
  237.       200,   81,   65,   82,   81,   65,   82,  198,  154,   51,
  238.        47,   65,   84,  101,  204,   84,  102,  155,   85,   86,
  239.        66,   85,   86,  171,  143,   67,  143,  143,  123,  103,
  240.        68,   68,   68,   68,   68,   68,   68,   68,   68,   65,
  241.       104,  105,  104,  104,  108,  168,  203,  143,   66,  143,
  242.       143,  202,  190,   67,  109,  178,  124,  170,   68,   68,
  243.        68,   68,   68,   68,   68,   68,   68,   87,   87,   88,
  244.        87,   87,   89,   87,   87,   87,   90,   87,   87,   91,
  245.        92,   87,   87,   87,   87,   87,   87,   87,   93,   93,
  246.  
  247.        93,   93,   93,   93,   93,   93,   93,   94,   87,   95,
  248.       128,  196,  124,  170,  200,  124,  170,  129,  129,  129,
  249.       129,  129,  129,  129,  129,  129,  131,  132,  131,  131,
  250.       154,  181,  168,  198,  195,  194,  187,  133,  184,  155,
  251.       147,  192,  193,  181,  191,  125,  189,  168,  166,  188,
  252.       187,  159,  182,  146,  141,  138,  134,  174,  181,  174,
  253.       177,  176,  172,  169,  168,  166,  174,  174,  174,  174,
  254.       174,  174,  174,  174,  174,  164,  162,  175,  131,  132,
  255.       131,  131,  111,  116,  159,  156,  126,  150,  148,  133,
  256.       126,  146,  144,  141,  138,  136,  135,  126,  124,  122,
  257.  
  258.       116,  111,  206,   97,   97,   69,   69,   60,  134,  183,
  259.       183,  184,  183,  183,  185,  183,  183,  183,  185,  183,
  260.       183,  183,  185,  183,  183,  183,  183,  183,  183,  183,
  261.       185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
  262.       183,  185,   32,   32,   32,   32,   32,   32,   32,   32,
  263.        32,   32,   32,   32,   42,   42,   42,   42,   42,   42,
  264.        42,   42,   42,   42,   42,   42,   57,   57,   57,   57,
  265.        57,   57,   57,   57,   57,   57,   57,   57,   59,   59,
  266.        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
  267.        61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
  268.  
  269.        61,   61,   64,   64,   64,   64,   64,   64,   64,   64,
  270.        64,   64,   64,   64,   65,   65,   65,   65,   65,   65,
  271.        65,   65,   65,   65,   65,   65,   70,   70,   70,   70,
  272.        70,   70,   70,   70,   70,   70,   70,   70,   75,   75,
  273.        75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
  274.        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
  275.        79,   79,   83,   83,   83,   83,   83,   83,   83,   83,
  276.        83,   83,   83,   83,   96,   96,   96,   96,   96,   96,
  277.        96,   96,   96,   96,   96,   96,  100,  100,  100,  100,
  278.       100,  100,  100,  100,  100,  100,  100,  100,  106,  106,
  279.  
  280.        60,   58,  106,  107,  107,   58,  206,  107,  110,  110,
  281.       110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
  282.       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
  283.       112,  112,  117,  117,  206,  206,  117,  118,  118,  206,
  284.       206,  206,  206,  206,  206,  206,  118,  123,  123,  206,
  285.       123,  123,  123,  123,  123,  206,  123,  123,  123,  125,
  286.       125,  206,  125,  125,  125,  125,  125,  125,  125,  125,
  287.       125,  127,  127,  206,  127,  127,  127,  127,  127,  127,
  288.       127,  127,  127,  130,  130,  130,  130,  130,  130,  130,
  289.       130,  130,  130,  130,  130,  137,  137,  137,  137,  137,
  290.  
  291.       137,  137,  137,  137,  137,  137,  137,  139,  206,  206,
  292.       139,  139,  139,  139,  139,  139,  139,  139,  139,  140,
  293.       140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
  294.       140,  142,  142,  206,  142,  142,  142,  142,  142,  142,
  295.       142,  142,  142,  145,  145,  206,  206,  145,  147,  147,
  296.       206,  147,  147,  147,  147,  147,  147,  147,  147,  147,
  297.       149,  149,  206,  149,  149,  149,  149,  149,  149,  149,
  298.       149,  149,  151,  151,  206,  151,  151,  151,  151,  151,
  299.       206,  151,  151,  151,  152,  152,  206,  206,  206,  152,
  300.       152,  152,  152,  206,  152,  153,  153,  206,  153,  153,
  301.  
  302.       153,  153,  153,  153,  153,  153,  153,  157,  157,  206,
  303.       206,  157,  158,  158,  158,  158,  158,  158,  158,  158,
  304.       158,  158,  158,  158,  160,  160,  206,  206,  160,  160,
  305.       160,  206,  160,  160,  160,  160,  161,  161,  206,  161,
  306.       161,  161,  161,  161,  161,  161,  161,  161,  163,  163,
  307.       206,  163,  163,  163,  163,  163,  163,  163,  163,  163,
  308.       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
  309.       165,  165,  167,  167,  167,  167,  167,  167,  167,  167,
  310.       167,  167,  167,  167,  173,  173,  206,  173,  173,  173,
  311.       173,  173,  173,  173,  173,  179,  179,  206,  179,  179,
  312.  
  313.       179,  179,  179,  179,  179,  179,  179,  180,  180,  180,
  314.       180,  180,  180,  180,  180,  180,  180,  180,  180,  186,
  315.       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
  316.       186,  185,  185,  185,  185,  185,  185,  185,  185,  185,
  317.       185,  185,  185,  197,  197,  197,  197,  197,  197,  197,
  318.       197,  197,  197,  197,  197,  199,  199,  199,  199,  199,
  319.       199,  199,  199,  199,  199,  199,  199,  201,  201,  201,
  320.       201,  201,  201,  201,  201,  201,  201,  201,  201,   31,
  321.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  322.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  323.  
  324.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  325.       206,  206,  206
  326.     ) ;
  327.  
  328. yy_chk : constant array(0..913) of short :=
  329.     (   0,
  330.         0,    1,    1,    1,    1,    9,    9,    9,    9,   10,
  331.        10,   10,   10,   43,   27,   46,   46,   28,   46,   39,
  332.       204,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  333.         2,    2,    2,    2,   15,    2,   16,    2,   39,   36,
  334.        39,    2,   43,   15,   27,   16,   15,   28,   16,   36,
  335.         2,    2,    2,    2,    2,    2,    2,    2,    2,    3,
  336.         3,    3,    3,    3,   15,    3,   16,   17,    3,   18,
  337.        17,    3,   18,    3,  118,    3,    3,   33,   33,   33,
  338.        33,  123,  123,   17,   29,   18,  201,   29,    3,    3,
  339.         4,    4,    4,    4,    4,   19,    4,    4,   20,    4,
  340.  
  341.        29,    4,    4,  118,    4,   19,    4,    4,   20,    4,
  342.       199,   19,   21,   19,   20,   22,   20,  197,   90,    4,
  343.         4,   11,   21,   30,  195,   22,   30,   90,   21,   21,
  344.        11,   22,   22,  124,   62,   11,   62,   62,  124,   30,
  345.        11,   11,   11,   11,   11,   11,   11,   11,   11,   12,
  346.       104,  104,  104,  104,  107,  134,  194,  143,   12,  143,
  347.       143,  193,  171,   12,  107,  134,  171,  171,   12,   12,
  348.        12,   12,   12,   12,   12,   12,   12,   23,   23,   23,
  349.        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
  350.        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
  351.  
  352.        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
  353.        51,  190,  196,  196,  192,  190,  190,   51,   51,   51,
  354.        51,   51,   51,   51,   51,   51,   52,   52,   52,   52,
  355.       153,  177,  178,  191,  189,  188,  186,   52,  185,  153,
  356.       182,  177,  178,  180,  176,  172,  169,  167,  165,  164,
  357.       162,  158,  148,  146,  140,  137,   52,  129,  136,  129,
  358.       133,  130,  126,  122,  120,  116,  129,  129,  129,  129,
  359.       129,  129,  129,  129,  129,  114,  112,  129,  131,  131,
  360.       131,  131,  110,  109,   96,   91,   85,   82,   81,  131,
  361.        78,   73,   67,   59,   57,   55,   54,   50,   49,   48,
  362.  
  363.        40,   38,   31,   26,   25,   14,   13,    8,  131,  156,
  364.       156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
  365.       156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
  366.       156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
  367.       156,  156,  207,  207,  207,  207,  207,  207,  207,  207,
  368.       207,  207,  207,  207,  208,  208,  208,  208,  208,  208,
  369.       208,  208,  208,  208,  208,  208,  209,  209,  209,  209,
  370.       209,  209,  209,  209,  209,  209,  209,  209,  210,  210,
  371.       210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
  372.       211,  211,  211,  211,  211,  211,  211,  211,  211,  211,
  373.  
  374.       211,  211,  212,  212,  212,  212,  212,  212,  212,  212,
  375.       212,  212,  212,  212,  213,  213,  213,  213,  213,  213,
  376.       213,  213,  213,  213,  213,  213,  214,  214,  214,  214,
  377.       214,  214,  214,  214,  214,  214,  214,  214,  215,  215,
  378.       215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
  379.       216,  216,  216,  216,  216,  216,  216,  216,  216,  216,
  380.       216,  216,  217,  217,  217,  217,  217,  217,  217,  217,
  381.       217,  217,  217,  217,  218,  218,  218,  218,  218,  218,
  382.       218,  218,  218,  218,  218,  218,  219,  219,  219,  219,
  383.       219,  219,  219,  219,  219,  219,  219,  219,  220,  220,
  384.  
  385.         7,    6,  220,  221,  221,    5,    0,  221,  222,  222,
  386.       222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
  387.       223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
  388.       223,  223,  224,  224,    0,    0,  224,  225,  225,    0,
  389.         0,    0,    0,    0,    0,    0,  225,  226,  226,    0,
  390.       226,  226,  226,  226,  226,    0,  226,  226,  226,  227,
  391.       227,    0,  227,  227,  227,  227,  227,  227,  227,  227,
  392.       227,  228,  228,    0,  228,  228,  228,  228,  228,  228,
  393.       228,  228,  228,  229,  229,  229,  229,  229,  229,  229,
  394.       229,  229,  229,  229,  229,  230,  230,  230,  230,  230,
  395.  
  396.       230,  230,  230,  230,  230,  230,  230,  231,    0,    0,
  397.       231,  231,  231,  231,  231,  231,  231,  231,  231,  232,
  398.       232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
  399.       232,  233,  233,    0,  233,  233,  233,  233,  233,  233,
  400.       233,  233,  233,  234,  234,    0,    0,  234,  235,  235,
  401.         0,  235,  235,  235,  235,  235,  235,  235,  235,  235,
  402.       236,  236,    0,  236,  236,  236,  236,  236,  236,  236,
  403.       236,  236,  237,  237,    0,  237,  237,  237,  237,  237,
  404.         0,  237,  237,  237,  238,  238,    0,    0,    0,  238,
  405.       238,  238,  238,    0,  238,  239,  239,    0,  239,  239,
  406.  
  407.       239,  239,  239,  239,  239,  239,  239,  240,  240,    0,
  408.         0,  240,  241,  241,  241,  241,  241,  241,  241,  241,
  409.       241,  241,  241,  241,  242,  242,    0,    0,  242,  242,
  410.       242,    0,  242,  242,  242,  242,  243,  243,    0,  243,
  411.       243,  243,  243,  243,  243,  243,  243,  243,  244,  244,
  412.         0,  244,  244,  244,  244,  244,  244,  244,  244,  244,
  413.       245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
  414.       245,  245,  246,  246,  246,  246,  246,  246,  246,  246,
  415.       246,  246,  246,  246,  247,  247,    0,  247,  247,  247,
  416.       247,  247,  247,  247,  247,  248,  248,    0,  248,  248,
  417.  
  418.       248,  248,  248,  248,  248,  248,  248,  249,  249,  249,
  419.       249,  249,  249,  249,  249,  249,  249,  249,  249,  250,
  420.       250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
  421.       250,  251,  251,  251,  251,  251,  251,  251,  251,  251,
  422.       251,  251,  251,  252,  252,  252,  252,  252,  252,  252,
  423.       252,  252,  252,  252,  252,  253,  253,  253,  253,  253,
  424.       253,  253,  253,  253,  253,  253,  253,  254,  254,  254,
  425.       254,  254,  254,  254,  254,  254,  254,  254,  254,  206,
  426.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  427.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  428.  
  429.       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
  430.       206,  206,  206
  431.     ) ;
  432.  
  433.  
  434. -- copy whatever the last rule matched to the standard output
  435.  
  436. procedure ECHO is
  437. begin
  438.    if (text_io.is_open(user_output_file)) then
  439.      text_io.put( user_output_file, yytext );
  440.    else
  441.      text_io.put( yytext );
  442.    end if;
  443. end ECHO;
  444.  
  445. -- enter a start condition.
  446. -- Using procedure requires a () after the ENTER, but makes everything
  447. -- much neater.
  448.  
  449. procedure ENTER( state : integer ) is
  450. begin
  451.      yy_start := 1 + 2 * state;
  452. end ENTER;
  453.  
  454. -- action number for EOF rule of a given start state
  455. function YY_STATE_EOF(state : integer) return integer is
  456. begin
  457.      return YY_END_OF_BUFFER + state + 1;
  458. end YY_STATE_EOF;
  459.  
  460. -- return all but the first 'n' matched characters back to the input stream
  461. procedure yyless(n : integer) is
  462. begin
  463.         yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  464.         yy_cp := yy_bp + n;
  465.         yy_c_buf_p := yy_cp;
  466.         YY_DO_BEFORE_ACTION; -- set up yytext again
  467. end yyless;
  468.  
  469. -- redefine this if you have something you want each time.
  470. procedure YY_USER_ACTION is
  471. begin
  472.         null;
  473. end;
  474.  
  475. -- yy_get_previous_state - get the state just before the EOB char was reached
  476.  
  477. function yy_get_previous_state return yy_state_type is
  478.     yy_current_state : yy_state_type;
  479.     yy_c : short;
  480.     yy_bp : integer := yytext_ptr;
  481. begin
  482.     yy_current_state := yy_start;
  483.     if ( yy_ch_buf(yy_bp-1) = ASCII.LF ) then
  484.     yy_current_state := yy_current_state + 1;
  485.     end if;
  486.  
  487.     for yy_cp in yytext_ptr..yy_c_buf_p - 1 loop
  488.     yy_c := yy_ec(yy_ch_buf(yy_cp));
  489.     if ( yy_accept(yy_current_state) /= 0 ) then
  490.         yy_last_accepting_state := yy_current_state;
  491.         yy_last_accepting_cpos := yy_cp;
  492.     end if;
  493.     while ( yy_chk(yy_base(yy_current_state) + yy_c) /= yy_current_state ) loop
  494.         yy_current_state := yy_def(yy_current_state);
  495.         if ( yy_current_state >= 207 ) then
  496.         yy_c := yy_meta(yy_c);
  497.         end if;
  498.     end loop;
  499.     yy_current_state := yy_nxt(yy_base(yy_current_state) + yy_c);
  500.     end loop;
  501.  
  502.     return yy_current_state;
  503. end yy_get_previous_state;
  504.  
  505. procedure yyrestart( input_file : file_type ) is
  506. begin
  507.    open_input(text_io.name(input_file));
  508. end yyrestart;
  509.  
  510. begin -- of YYLex
  511. <<new_file>>
  512.         -- this is where we enter upon encountering an end-of-file and
  513.         -- yywrap() indicating that we should continue processing
  514.  
  515.     if ( yy_init ) then
  516.         if ( yy_start = 0 ) then
  517.             yy_start := 1;      -- first start state
  518.         end if;
  519.  
  520.         -- we put in the '\n' and start reading from [1] so that an
  521.         -- initial match-at-newline will be true.
  522.  
  523.         yy_ch_buf(0) := ASCII.LF;
  524.         yy_n_chars := 1;
  525.  
  526.         -- we always need two end-of-buffer characters.  The first causes
  527.         -- a transition to the end-of-buffer state.  The second causes
  528.         -- a jam in that state.
  529.  
  530.         yy_ch_buf(yy_n_chars) := YY_END_OF_BUFFER_CHAR;
  531.         yy_ch_buf(yy_n_chars + 1) := YY_END_OF_BUFFER_CHAR;
  532.  
  533.         yy_eof_has_been_seen := false;
  534.  
  535.         yytext_ptr := 1;
  536.         yy_c_buf_p := yytext_ptr;
  537.         yy_hold_char := yy_ch_buf(yy_c_buf_p);
  538.         yy_init := false;
  539.     end if; -- yy_init
  540.  
  541.     loop                -- loops until end-of-file is reached
  542.         yy_cp := yy_c_buf_p;
  543.  
  544.         -- support of yytext
  545.         yy_ch_buf(yy_cp) := yy_hold_char;
  546.  
  547.         -- yy_bp points to the position in yy_ch_buf of the start of the
  548.         -- current run.
  549.     yy_bp := yy_cp;
  550.     yy_current_state := yy_start;
  551.     if ( yy_ch_buf(yy_bp-1) = ASCII.LF ) then
  552.         yy_current_state := yy_current_state + 1;
  553.     end if;
  554.     loop
  555.         yy_c := yy_ec(yy_ch_buf(yy_cp));
  556.         if ( yy_accept(yy_current_state) /= 0 ) then
  557.             yy_last_accepting_state := yy_current_state;
  558.             yy_last_accepting_cpos := yy_cp;
  559.         end if;
  560.         while ( yy_chk(yy_base(yy_current_state) + yy_c) /= yy_current_state ) loop
  561.             yy_current_state := yy_def(yy_current_state);
  562.             if ( yy_current_state >= 207 ) then
  563.             yy_c := yy_meta(yy_c);
  564.             end if;
  565.         end loop;
  566.         yy_current_state := yy_nxt(yy_base(yy_current_state) + yy_c);
  567.         yy_cp := yy_cp + 1;
  568. if ( yy_current_state = 206 ) then
  569.     exit;
  570. end if;
  571.     end loop;
  572.     yy_cp := yy_last_accepting_cpos;
  573.     yy_current_state := yy_last_accepting_state;
  574.  
  575. <<next_action>>
  576.         yy_act := yy_accept(yy_current_state);
  577.             YY_DO_BEFORE_ACTION;
  578.             YY_USER_ACTION;
  579.  
  580.         if aflex_debug then  -- output acceptance info. for (-d) debug mode
  581.             text_io.put( Standard_Error, "--accepting rule #" );
  582.             text_io.put( Standard_Error, INTEGER'IMAGE(yy_act) );
  583.             text_io.put_line( Standard_Error, "(""" & yytext & """)");
  584.         end if;
  585.  
  586. <<do_action>>   -- this label is used only to access EOF actions
  587.             case yy_act is
  588.         when 0 => -- must backtrack
  589.         -- undo the effects of YY_DO_BEFORE_ACTION
  590.         yy_ch_buf(yy_cp) := yy_hold_char;
  591.         yy_cp := yy_last_accepting_cpos;
  592.         yy_current_state := yy_last_accepting_state;
  593.         goto next_action;
  594.  
  595.  
  596.  
  597. when 1 => 
  598. --# line 46 "ascan.l"
  599.  indented_code := true; 
  600.  
  601. when 2 => 
  602. --# line 47 "ascan.l"
  603.  linenum := linenum + 1; ECHO;
  604.                 -- treat as a comment;
  605.             
  606.  
  607. when 3 => 
  608. --# line 50 "ascan.l"
  609.  linenum := linenum + 1; ECHO; 
  610.  
  611. when 4 => 
  612. --# line 51 "ascan.l"
  613.  return ( SCDECL ); 
  614.  
  615. when 5 => 
  616. --# line 52 "ascan.l"
  617.  return ( XSCDECL ); 
  618.  
  619. when 6 => 
  620. --# line 54 "ascan.l"
  621.  return ( WHITESPACE ); 
  622.  
  623. when 7 => 
  624. --# line 56 "ascan.l"
  625.  
  626.             sectnum := 2;
  627.             misc.line_directive_out;
  628.             ENTER(SECT2PROLOG);
  629.             return ( SECTEND );
  630.             
  631.  
  632. when 8 => 
  633. --# line 63 "ascan.l"
  634.  
  635.             text_io.put( Standard_Error, "old-style lex command at line " );
  636.             int_io.put( Standard_Error, linenum );
  637.             text_io.put( Standard_Error, "ignored:" );
  638.             text_io.new_line( Standard_Error );
  639.             text_io.put( Standard_Error, ASCII.HT );
  640.             text_io.put( Standard_Error, yytext(1..YYLength) );
  641.             linenum := linenum + 1;
  642.             
  643.  
  644. when 9 => 
  645. --# line 73 "ascan.l"
  646.  
  647.             nmstr := vstr(yytext(1..YYLength));
  648.             didadef := false;
  649.             ENTER(PICKUPDEF);
  650.             
  651.  
  652. when 10 => 
  653. --# line 79 "ascan.l"
  654.  nmstr := vstr(yytext(1..YYLength));
  655.               return NAME;
  656.             
  657.  
  658. when 11 => 
  659. --# line 82 "ascan.l"
  660.  linenum := linenum + 1;
  661.               -- allows blank lines in section 1;
  662.             
  663.  
  664. when 12 => 
  665. --# line 85 "ascan.l"
  666.  linenum := linenum + 1; return Newline; 
  667.  
  668. when 13 => 
  669. --# line 86 "ascan.l"
  670.  misc.synerr( "illegal character" );ENTER(RECOVER);
  671.  
  672. when 14 => 
  673. --# line 88 "ascan.l"
  674.  null;
  675.               -- separates name and definition;
  676.             
  677.  
  678. when 15 => 
  679. --# line 92 "ascan.l"
  680.  
  681.             nmdef := vstr(yytext(1..YYLength));
  682.  
  683.             i := tstring.len( nmdef );
  684.             while ( i >= tstring.first ) loop
  685.                 if ( (CHAR(nmdef,i) /= ' ') and
  686.                  (CHAR(nmdef,i) /= ASCII.HT) ) then
  687.                 exit;
  688.                 end if;
  689.                 i := i - 1;
  690.             end loop;
  691.  
  692.                         sym.ndinstal( nmstr,
  693.                 tstring.slice(nmdef, tstring.first, i) );
  694.             didadef := true;
  695.             
  696.  
  697. when 16 => 
  698. --# line 109 "ascan.l"
  699.  
  700.             if ( not didadef ) then
  701.                 misc.synerr( "incomplete name definition" );
  702.             end if;
  703.             ENTER(0);
  704.             linenum := linenum + 1;
  705.             
  706.  
  707. when 17 => 
  708. --# line 117 "ascan.l"
  709.  linenum := linenum + 1;
  710.               ENTER(0);
  711.               nmstr := vstr(yytext(1..YYLength));
  712.               return NAME;
  713.             
  714.  
  715. when 18 => 
  716. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  717. yy_cp := yy_cp - 1;
  718. yy_c_buf_p := yy_cp;
  719. YY_DO_BEFORE_ACTION; -- set up yytext again
  720. --# line 123 "ascan.l"
  721.  
  722.             linenum := linenum + 1;
  723.             ACTION_ECHO;
  724.             MARK_END_OF_PROLOG;
  725.             ENTER(SECT2);
  726.             
  727.  
  728. when 19 => 
  729. --# line 130 "ascan.l"
  730.  linenum := linenum + 1; ACTION_ECHO; 
  731.  
  732. when YY_END_OF_BUFFER +SECT2PROLOG + 1 
  733.  =>
  734. --# line 132 "ascan.l"
  735.  MARK_END_OF_PROLOG;
  736.               return End_Of_Input;
  737.             
  738.  
  739. when 21 => 
  740. --# line 136 "ascan.l"
  741.  linenum := linenum + 1;
  742.               -- allow blank lines in sect2;
  743.  
  744.             -- this rule matches indented lines which
  745.             -- are not comments.
  746. when 22 => 
  747. --# line 141 "ascan.l"
  748.  
  749.             misc.synerr("indented code found outside of action");
  750.             linenum := linenum + 1;
  751.             
  752.  
  753. when 23 => 
  754. --# line 146 "ascan.l"
  755.  ENTER(SC); return ( '<' ); 
  756.  
  757. when 24 => 
  758. --# line 147 "ascan.l"
  759.  return ( '^' );  
  760.  
  761. when 25 => 
  762. --# line 148 "ascan.l"
  763.  ENTER(QUOTE); return ( '"' ); 
  764.  
  765. when 26 => 
  766. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  767.  yy_cp := yy_bp + 1;
  768. yy_c_buf_p := yy_cp;
  769. YY_DO_BEFORE_ACTION; -- set up yytext again
  770. --# line 149 "ascan.l"
  771.  ENTER(NUM); return ( '{' ); 
  772.  
  773. when 27 => 
  774. --# line 150 "ascan.l"
  775.  ENTER(BRACEERROR); 
  776.  
  777. when 28 => 
  778. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  779.  yy_cp := yy_bp + 1;
  780. yy_c_buf_p := yy_cp;
  781. YY_DO_BEFORE_ACTION; -- set up yytext again
  782. --# line 151 "ascan.l"
  783.  return ( '$' ); 
  784.  
  785. when 29 => 
  786. --# line 153 "ascan.l"
  787.  continued_action := true;
  788.               linenum := linenum + 1;
  789.               return Newline;
  790.             
  791.  
  792. when 30 => 
  793. --# line 158 "ascan.l"
  794.  linenum := linenum + 1; ACTION_ECHO; 
  795.  
  796. when 31 => 
  797. --# line 160 "ascan.l"
  798.  
  799.             -- this rule is separate from the one below because
  800.             -- otherwise we get variable trailing context, so
  801.             -- we can't build the scanner using -f,F
  802.  
  803.             bracelevel := 0;
  804.             continued_action := false;
  805.             ENTER(ACTION);
  806.             return Newline;
  807.             
  808.  
  809. when 32 => 
  810. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  811. yy_cp := yy_cp - 1;
  812. yy_c_buf_p := yy_cp;
  813. YY_DO_BEFORE_ACTION; -- set up yytext again
  814. --# line 171 "ascan.l"
  815.  
  816.             bracelevel := 0;
  817.             continued_action := false;
  818.             ENTER(ACTION);
  819.             return Newline;
  820.             
  821.  
  822. when 33 => 
  823. --# line 178 "ascan.l"
  824.  linenum := linenum + 1; return Newline; 
  825.  
  826. when 34 => 
  827. --# line 180 "ascan.l"
  828.  return ( EOF_OP ); 
  829.  
  830. when 35 => 
  831. --# line 182 "ascan.l"
  832.  
  833.             sectnum := 3;
  834.             ENTER(SECT3);
  835.             return ( End_Of_Input );
  836.             -- to stop the parser
  837.             
  838.  
  839. when 36 => 
  840. --# line 189 "ascan.l"
  841.  
  842.  
  843.             nmstr := vstr(yytext(1..YYLength));
  844.  
  845.             -- check to see if we've already encountered this ccl
  846.                         cclval := sym.ccllookup( nmstr );
  847.             if ( cclval /= 0 ) then
  848.                 yylval := cclval;
  849.                 cclreuse := cclreuse + 1;
  850.                 return ( PREVCCL );
  851.             else
  852.                 -- we fudge a bit.  We know that this ccl will
  853.                 -- soon be numbered as lastccl + 1 by cclinit
  854.                 sym.cclinstal( nmstr, lastccl + 1 );
  855.  
  856.                 -- push back everything but the leading bracket
  857.                 -- so the ccl can be rescanned
  858.  
  859.                 PUT_BACK_STRING(nmstr, 1);
  860.  
  861.                 ENTER(FIRSTCCL);
  862.                 return ( '[' );
  863.             end if;
  864.             
  865.  
  866. when 37 => 
  867. --# line 214 "ascan.l"
  868.  
  869.             nmstr := vstr(yytext(1..YYLength));
  870.             -- chop leading and trailing brace
  871.             tmpbuf := slice(vstr(yytext(1..YYLength)),
  872.                                 2, YYLength-1);
  873.  
  874.             nmdefptr := sym.ndlookup( tmpbuf );
  875.             if ( nmdefptr = NUL ) then
  876.                 misc.synerr( "undefined {name}" );
  877.             else
  878.                 -- push back name surrounded by ()'s
  879.                 unput(')');
  880.                 PUT_BACK_STRING(nmdefptr, 0);
  881.                 unput('(');
  882.             end if;
  883.             
  884.  
  885. when 38 => 
  886. --# line 231 "ascan.l"
  887.  tmpbuf := vstr(yytext(1..YYLength));
  888.               case tstring.CHAR(tmpbuf,1) is
  889.                 when '/' => return '/';
  890.                 when '|' => return '|';
  891.                 when '*' => return '*';
  892.                 when '+' => return '+';
  893.                 when '?' => return '?';
  894.                 when '.' => return '.';
  895.                 when '(' => return '(';
  896.                 when ')' => return ')';
  897.                 when others =>
  898.                     misc.aflexerror("error in aflex case");
  899.               end case;
  900.             
  901.  
  902. when 39 => 
  903. --# line 245 "ascan.l"
  904.  tmpbuf := vstr(yytext(1..YYLength));
  905.               yylval := CHARACTER'POS(CHAR(tmpbuf,1));
  906.               return CHAR;
  907.             
  908.  
  909. when 40 => 
  910. --# line 249 "ascan.l"
  911.  linenum := linenum + 1; return Newline; 
  912.  
  913. when 41 => 
  914. --# line 252 "ascan.l"
  915.  return ( ',' ); 
  916.  
  917. when 42 => 
  918. --# line 253 "ascan.l"
  919.  ENTER(SECT2); return ( '>' ); 
  920.  
  921. when 43 => 
  922. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  923.  yy_cp := yy_bp + 1;
  924. yy_c_buf_p := yy_cp;
  925. YY_DO_BEFORE_ACTION; -- set up yytext again
  926. --# line 254 "ascan.l"
  927.  ENTER(CARETISBOL); return ( '>' ); 
  928.  
  929. when 44 => 
  930. --# line 255 "ascan.l"
  931.  nmstr := vstr(yytext(1..YYLength));
  932.               return NAME;
  933.             
  934.  
  935. when 45 => 
  936. --# line 258 "ascan.l"
  937.  misc.synerr( "bad start condition name" ); 
  938.  
  939. when 46 => 
  940. --# line 260 "ascan.l"
  941.  ENTER(SECT2); return ( '^' ); 
  942.  
  943. when 47 => 
  944. --# line 263 "ascan.l"
  945.  tmpbuf := vstr(yytext(1..YYLength));
  946.               yylval := CHARACTER'POS(CHAR(tmpbuf,1));
  947.               return CHAR;
  948.             
  949.  
  950. when 48 => 
  951. --# line 267 "ascan.l"
  952.  ENTER(SECT2); return ( '"' ); 
  953.  
  954. when 49 => 
  955. --# line 269 "ascan.l"
  956.  
  957.             misc.synerr( "missing quote" );
  958.             ENTER(SECT2);
  959.             linenum := linenum + 1;
  960.             return ( '"' );
  961.             
  962.  
  963. when 50 => 
  964. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  965.  yy_cp := yy_bp + 1;
  966. yy_c_buf_p := yy_cp;
  967. YY_DO_BEFORE_ACTION; -- set up yytext again
  968. --# line 277 "ascan.l"
  969.  ENTER(CCL); return ( '^' ); 
  970.  
  971. when 51 => 
  972. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  973.  yy_cp := yy_bp + 1;
  974. yy_c_buf_p := yy_cp;
  975. YY_DO_BEFORE_ACTION; -- set up yytext again
  976. --# line 278 "ascan.l"
  977.  return ( '^' ); 
  978.  
  979. when 52 => 
  980. --# line 279 "ascan.l"
  981.  ENTER(CCL); yylval := CHARACTER'POS('-'); return ( CHAR ); 
  982.  
  983. when 53 => 
  984. --# line 280 "ascan.l"
  985.  ENTER(CCL);
  986.               tmpbuf := vstr(yytext(1..YYLength));
  987.               yylval := CHARACTER'POS(CHAR(tmpbuf,1));
  988.               return CHAR;
  989.             
  990.  
  991. when 54 => 
  992. yy_ch_buf(yy_cp) := yy_hold_char; -- undo effects of setting up yytext
  993.  yy_cp := yy_bp + 1;
  994. yy_c_buf_p := yy_cp;
  995. YY_DO_BEFORE_ACTION; -- set up yytext again
  996. --# line 286 "ascan.l"
  997.  return ( '-' ); 
  998.  
  999. when 55 => 
  1000. --# line 287 "ascan.l"
  1001.  tmpbuf := vstr(yytext(1..YYLength));
  1002.               yylval := CHARACTER'POS(CHAR(tmpbuf,1));
  1003.               return CHAR;
  1004.             
  1005.  
  1006. when 56 => 
  1007. --# line 291 "ascan.l"
  1008.  ENTER(SECT2); return ( ']' ); 
  1009.  
  1010. when 57 => 
  1011. --# line 294 "ascan.l"
  1012.  
  1013.             yylval := misc.myctoi( vstr(yytext(1..YYLength)) );
  1014.             return ( NUMBER );
  1015.             
  1016.  
  1017. when 58 => 
  1018. --# line 299 "ascan.l"
  1019.  return ( ',' ); 
  1020.  
  1021. when 59 => 
  1022. --# line 300 "ascan.l"
  1023.  ENTER(SECT2); return ( '}' ); 
  1024.  
  1025. when 60 => 
  1026. --# line 302 "ascan.l"
  1027.  
  1028.             misc.synerr( "bad character inside {}'s" );
  1029.             ENTER(SECT2);
  1030.             return ( '}' );
  1031.             
  1032.  
  1033. when 61 => 
  1034. --# line 308 "ascan.l"
  1035.  
  1036.             misc.synerr( "missing }" );
  1037.             ENTER(SECT2);
  1038.             linenum := linenum + 1;
  1039.             return ( '}' );
  1040.             
  1041.  
  1042. when 62 => 
  1043. --# line 316 "ascan.l"
  1044.  misc.synerr( "bad name in {}'s" ); ENTER(SECT2); 
  1045.  
  1046. when 63 => 
  1047. --# line 317 "ascan.l"
  1048.  misc.synerr( "missing }" );
  1049.               linenum := linenum + 1;
  1050.               ENTER(SECT2);
  1051.             
  1052.  
  1053. when 64 => 
  1054. --# line 322 "ascan.l"
  1055.  bracelevel := bracelevel + 1; 
  1056.  
  1057. when 65 => 
  1058. --# line 323 "ascan.l"
  1059.  bracelevel := bracelevel - 1; 
  1060.  
  1061. when 66 => 
  1062. --# line 324 "ascan.l"
  1063.  ACTION_ECHO; 
  1064.  
  1065. when 67 => 
  1066. --# line 325 "ascan.l"
  1067.  ACTION_ECHO; 
  1068.  
  1069. when 68 => 
  1070. --# line 326 "ascan.l"
  1071.  linenum := linenum + 1; ACTION_ECHO; 
  1072.  
  1073. when 69 => 
  1074. --# line 327 "ascan.l"
  1075.  ACTION_ECHO;
  1076.                   -- character constant;
  1077.             
  1078.  
  1079. when 70 => 
  1080. --# line 331 "ascan.l"
  1081.  ACTION_ECHO; ENTER(ACTION_STRING); 
  1082.  
  1083. when 71 => 
  1084. --# line 333 "ascan.l"
  1085.  
  1086.             linenum := linenum + 1;
  1087.             ACTION_ECHO;
  1088.             if ( bracelevel = 0 ) then
  1089.                 text_io.new_line ( temp_action_file );
  1090.                 ENTER(SECT2);
  1091.                     end if;
  1092.             
  1093.  
  1094. when 72 => 
  1095. --# line 341 "ascan.l"
  1096.  ACTION_ECHO; 
  1097.  
  1098. when 73 => 
  1099. --# line 343 "ascan.l"
  1100.  ACTION_ECHO; 
  1101.  
  1102. when 74 => 
  1103. --# line 344 "ascan.l"
  1104.  ACTION_ECHO; 
  1105.  
  1106. when 75 => 
  1107. --# line 345 "ascan.l"
  1108.  linenum := linenum + 1; ACTION_ECHO; 
  1109.  
  1110. when 76 => 
  1111. --# line 346 "ascan.l"
  1112.  ACTION_ECHO; ENTER(ACTION); 
  1113.  
  1114. when 77 => 
  1115. --# line 347 "ascan.l"
  1116.  ACTION_ECHO; 
  1117.  
  1118. when 78 => 
  1119. --# line 350 "ascan.l"
  1120.  
  1121.             yylval := CHARACTER'POS(misc.myesc( vstr(yytext(1..YYLength)) ));
  1122.             return ( CHAR );
  1123.             
  1124.  
  1125. when 79 => 
  1126. --# line 355 "ascan.l"
  1127.  
  1128.             yylval := CHARACTER'POS(misc.myesc( vstr(yytext(1..YYLength)) ));
  1129.             ENTER(CCL);
  1130.             return ( CHAR );
  1131.             
  1132.  
  1133. when 80 => 
  1134. --# line 362 "ascan.l"
  1135.  if ( check_yylex_here ) then
  1136.                 return End_Of_Input;
  1137.               else
  1138.                 ECHO;
  1139.               end if;
  1140.             
  1141.  
  1142. when 81 => 
  1143. --# line 368 "ascan.l"
  1144. raise AFLEX_SCANNER_JAMMED;
  1145. when YY_END_OF_BUFFER + INITIAL + 1 |
  1146. YY_END_OF_BUFFER + SECT2 + 1 |
  1147. YY_END_OF_BUFFER + SECT3 + 1 |
  1148. YY_END_OF_BUFFER + PICKUPDEF + 1 |
  1149. YY_END_OF_BUFFER + SC + 1 |
  1150. YY_END_OF_BUFFER + CARETISBOL + 1 |
  1151. YY_END_OF_BUFFER + NUM + 1 |
  1152. YY_END_OF_BUFFER + QUOTE + 1 |
  1153. YY_END_OF_BUFFER + FIRSTCCL + 1 |
  1154. YY_END_OF_BUFFER + CCL + 1 |
  1155. YY_END_OF_BUFFER + ACTION + 1 |
  1156. YY_END_OF_BUFFER + RECOVER + 1 |
  1157. YY_END_OF_BUFFER + BRACEERROR + 1 |
  1158. YY_END_OF_BUFFER + ACTION_STRING + 1 => 
  1159.     return End_Of_Input;
  1160.                 when YY_END_OF_BUFFER =>
  1161.                     -- undo the effects of YY_DO_BEFORE_ACTION
  1162.                     yy_ch_buf(yy_cp) := yy_hold_char;
  1163.  
  1164.                     yytext_ptr := yy_bp;
  1165.  
  1166.                     case yy_get_next_buffer is
  1167.                         when EOB_ACT_END_OF_FILE =>
  1168.                             begin
  1169.                             if ( yywrap ) then
  1170.                                 -- note: because we've taken care in
  1171.                                 -- yy_get_next_buffer() to have set up yytext,
  1172.                                 -- we can now set up yy_c_buf_p so that if some
  1173.                                 -- total hoser (like aflex itself) wants
  1174.                                 -- to call the scanner after we return the
  1175.                                 -- End_Of_Input, it'll still work - another
  1176.                                 -- End_Of_Input will get returned.
  1177.  
  1178.                                 yy_c_buf_p := yytext_ptr;
  1179.  
  1180.                                 yy_act := YY_STATE_EOF((yy_start - 1) / 2);
  1181.  
  1182.                                 goto do_action;
  1183.                             else
  1184.                                 --  start processing a new file
  1185.                                 yy_init := true;
  1186.                                 goto new_file;
  1187.                             end if;
  1188.                             end;
  1189.                         when EOB_ACT_RESTART_SCAN =>
  1190.                             yy_c_buf_p := yytext_ptr;
  1191.                             yy_hold_char := yy_ch_buf(yy_c_buf_p);
  1192.                         when EOB_ACT_LAST_MATCH =>
  1193.                             yy_c_buf_p := yy_n_chars;
  1194.                             yy_current_state := yy_get_previous_state;
  1195.  
  1196.                             yy_cp := yy_c_buf_p;
  1197.                             yy_bp := yytext_ptr;
  1198.                             goto next_action;
  1199.                         when others => null;
  1200.                         end case; -- case yy_get_next_buffer()
  1201.                 when others =>
  1202.                     text_io.put( "action # " );
  1203.                     text_io.put( INTEGER'IMAGE(yy_act) );
  1204.                     text_io.new_line;
  1205.                     raise AFLEX_INTERNAL_ERROR;
  1206.             end case; -- case (yy_act)
  1207.         end loop; -- end of loop waiting for end of file
  1208. end YYLex;
  1209. --# line 368 "ascan.l"
  1210. begin
  1211.     if (call_yylex) then
  1212.         toktype := YYLex;
  1213.         call_yylex := false;
  1214.         return toktype;
  1215.     end if;
  1216.  
  1217.     if ( eofseen ) then
  1218.     toktype := End_Of_Input;
  1219.     else
  1220.     toktype := YYLex;
  1221.     end if;
  1222. -- this tracing code allows easy tracing of aflex runs
  1223. if (trace) then
  1224. text_io.new_line(Standard_Error);
  1225. text_io.put(Standard_Error, "toktype = :" );
  1226. text_io.put(Standard_Error, Token'image(toktype));
  1227. text_io.put_line(Standard_Error, ":" );
  1228. end if;
  1229.  
  1230.     if ( toktype = End_Of_Input ) then
  1231.     eofseen := true;
  1232.  
  1233.     if ( sectnum = 1 ) then
  1234.         misc.synerr(  "unexpected EOF" );
  1235.         sectnum := 2;
  1236.         toktype := SECTEND;
  1237.     else
  1238.         if ( sectnum = 2 ) then
  1239.             sectnum := 3;
  1240.             toktype := SECTEND;
  1241.         end if;
  1242.         end if;
  1243.     end if;
  1244.     
  1245.     if ( trace ) then
  1246.     if ( beglin ) then
  1247.         int_io.put( Standard_Error, num_rules + 1 );
  1248.         text_io.put( Standard_Error, ASCII.HT );
  1249.         beglin := false;
  1250.         end if;
  1251.  
  1252.     case toktype is
  1253.         when '<' | '>'|'^'|'$'|'"'|'['|']'|'{'|'}'|'|'|'('|
  1254.                  ')'|'-'|'/'|'?'|'.'|'*'|'+'|',' =>
  1255.         text_io.put( Standard_Error, Token'image(toktype) );
  1256.  
  1257.         when NEWLINE =>
  1258.         text_io.new_line(Standard_Error);
  1259.         if ( sectnum = 2 ) then
  1260.             beglin := true;
  1261.                 end if;
  1262.  
  1263.         when SCDECL =>
  1264.         text_io.put( Standard_Error, "%s" );
  1265.  
  1266.         when XSCDECL =>
  1267.            text_io.put( Standard_Error, "%x" );
  1268.  
  1269.         when WHITESPACE =>
  1270.                text_io.put( Standard_Error, " " );
  1271.  
  1272.         when SECTEND =>
  1273.                text_io.put_line( Standard_Error, "%%" );       
  1274.  
  1275.         -- we set beglin to be true so we'll start
  1276.         -- writing out numbers as we echo rules.  aflexscan() has
  1277.         -- already assigned sectnum
  1278.  
  1279.         if ( sectnum = 2 ) then
  1280.             beglin := true;
  1281.                 end if;
  1282.  
  1283.         when NAME =>
  1284.         text_io.put( Standard_Error, ''' );
  1285.         text_io.put( Standard_Error, YYText);
  1286.         text_io.put( Standard_Error, ''' );
  1287.  
  1288.         when CHAR =>
  1289.             if ( (yylval < CHARACTER'POS(' ')) or
  1290.              (yylval = CHARACTER'POS(ASCII.DEL)) ) then
  1291.             text_io.put( Standard_Error, '\' );
  1292.             int_io.put( Standard_Error, yylval );
  1293.                 text_io.put( Standard_Error, '\' );
  1294.         else
  1295.             text_io.put( Standard_Error, Token'image(toktype) );
  1296.                 end if;
  1297.  
  1298.         when NUMBER =>
  1299.                 int_io.put( Standard_Error, yylval );
  1300.  
  1301.         when PREVCCL =>
  1302.         text_io.put( Standard_Error, '[' );
  1303.                int_io.put( Standard_Error, yylval );
  1304.         text_io.put( Standard_Error, ']' );        
  1305.  
  1306.             when End_Of_Input =>
  1307.                 text_io.put( Standard_Error, "End Marker" );
  1308.  
  1309.         when others =>
  1310.             text_io.put( Standard_Error, "Something weird:" );
  1311.         text_io.put_line( Standard_Error, Token'image(toktype));
  1312.         end case;
  1313.     end if;
  1314.         
  1315.     return toktype;
  1316.  
  1317. end get_token;
  1318. end scanner;
  1319.